/**
 * 
 */
package com.momosw.games.engine.events;

import com.momosw.games.engine.Action;
import com.momosw.games.engine.player.Player;
import com.momosw.games.jericho.board.Card;
import com.momosw.games.jericho.board.WallType;

/**
 * <b>Project:</b> JerichoCardGame<br />
 * <b>Package:</b> com.momosw.games.engine.events<br />
 * <b>Class:</b> ActionEvent.java<br />
 * <br />
 * <i>GSI 2011</i><br />
 *
 * @author Miguel Coronado (miguelcb84@gmail.com)
 * @version	Sep 8, 2011
 *
 */
public interface ActionEvent extends Event {

    /**
     * This returns the player associated to the current event.
     * This is a mandatory field.
     * @return  the player
     */
    public Player getPlayer();
    
    /**
     * This returns the action associated to the current event.
     * This is a mandatory field, so this method must return an
     * instance of <code>Action</code> interface.
     * 
     * @return The action
     */
    public Action getAction();
    
    /**
     * This returns the <code>Card</code> associated to the current event.
     * 
     * This is not a mandatory field, because, for instance, the events 
     * that results of the execution of a <code>FeedSuppyAction</code> do 
     * not have a card value when the notified player is not the player that
     * played the action.
     *  
     * @return The card
     */
    public Card getCard();
    
    /**
     * This returns the <code>WallType</code> associated to the current
     * event. This is not a mandatory field, because some Actions do not 
     * have a Wall Type value associated (only the 
     * <code>PlayCardAction</code> with a <code>TrumpetCard</code>).
     *  
     * @return The wall Type
     */
    public WallType getWallType();
    
}
